<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>正则</title>
	</head>
	<body>
		<script type="text/javascript">
			// 创建正则的2种方式
			// 1.字面量创建
			// var reg = /\d+/g
			// 2.构造函数创建
			// var reg2 = new RegExp('\\d+','g')
		</script>
		<script type="text/javascript">
			// 正则方法
			// 1.test 方法用于检测一个字符串是否匹配某个模式，也就是查找是否存在，返回布尔值
			
			//查找字符串中是否存在数字
			// let reg = /\d/g
			// let str = 'abcd1234';
			// let result = reg.test(str)
			// console.log(result) // true
			
			// let str2 = 'abcd';
			// let result2 = reg.test(str2)
			// console.log(result2) // false
			
			// 2.exce 方法用于检索字符串中的正则表达式的匹配，可以多次执行
			// let reg = /\d+/g
			// let str = 'abc123efg567'
			// let result = reg.exec(str)
			// let result2 = reg.exec(str)
			// // 第一次执行，返回第一组数字的结果数组
			// console.log(result);// ["123", index: 3, input: "abc123efg567"]
			// // 第二次执行，返回第二组数字的结果数组
			// console.log(result2);// ["567", index: 9, input: "abc123efg567"]
		</script>
		<script type="text/javascript">
			// 字符串方法
			// 1.split(separator,howmany) 把一个字符串分割成字符串数组,howmany可选。该参数可指定返回的数组的最大长度
			
			// // 1-1 将以下网址以.拆分为数组
			// let str = 'www.baidu.com';
			// let result = str.split('.')
			// console.log(result);
			// // ["www", "baidu", "com"]
			
			// // 1-2 将字符串abc123def456ghi78jkl以数字分割为数组，数组长度不超过3个
			// let str2 = "abc123def456ghi78jkl"
			// let result2 = str2.split(/\d+/,3);
			// console.log(result2);
			// // ["abc", "def", "ghi"]
			
			// 2.search() 方法
			
			// 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
			// 有值：返回字符出现的第一个位置索引，忽略全局g;
			// 如果没有找到任何匹配的子串，则返回 -1
			
			// let str = 'www.taobao.com';
			// let result = str.search('taobao')
			// console.log(result); // 有值：返回字符出现的第一个位置索引 4
			
			// let result2 = str.search("jd");
			// console.log(result2); // 无值：返回-1
			
			// let result3 = str.search(/\./);
			// console.log(result3); // 有值：返回字符出现的第一个位置索引 3
			
			// 3.replace() 替换字符
			// replace(regexp/substr,replacement)
			// regexp/substr 需要替换的子字符串，或要替换的正则模式
			// replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。
			
			// 过滤敏感词,将（教育部|复试|国家）替换为*号
			// let text = '教育部公布2020考研国家线 复试启动时间不早于4月30日4月14日，教育部公布《2020年全国硕士研究生招生考试考生进入复试的初试成绩基本要求》（国家分数线），并对复试工作进行部署，确定复试启动时间原则上不早于4月30日，可采取现场复试、网络远程复试、异地现场复试以及委托其他高校复试等。'
			// let result = text.replace(/教育部|复试|国家/g,function(val){
			// 	console.log(val)
			// 	return "*".repeat(val.length)
			// })
			// console.log(result);
			// **示例：** 手机号码 中间4位*代替
			let phone = '18945678798'
			let reg = /(\d{3})(\d{4})(\d{4})/g; 
			let result = phone.replace(reg,'$1****$3')
			console.log(result)
			// 元字符
			// 正则中有特殊含义的非字母字符。如：`. * + ? ^ | \ () [] {}`
			
			
			// 元字符 | 说明
			// ---|---
			//  . | 匹配除了\n \r \u208或\u2029 以外的字符
			//  * | 匹配前面的子表达式零次或多次
			//  + | 匹配前面的子表达式一次或多次,相当于 {1,}
			//  ? | 匹配前面的子表达式零次或一次,相当于 {0,1}
			//  ^ | 匹配输入字符串的开始位置,如以什么什么开始
			//  \ | 转义，将特殊含义的转换成字面量含义
			
			
			// **示例：**div中是否有内容
			// let str = "<div>hello word</div>"
			// let reg = /<div>.*<\/div>/g
			// let result = reg.test(str)
			// console.log(result)
			
			// **示例：**以什么开头，以什么结尾
			// let str = "hello word!";
			// let reg = /^h.*!$/;
			// let result = reg.test(str)
			// console.log(result);
			
			
			// **示例：**将单位km替换为千米
			// let str = '老家到镇上有1km的路程，镇子到县城有10KM的路程，县城到市区有5kM的路程'
			// let reg = /[kK][mM]/g
			// let result = str.replace(reg,'千米')
			// console.log(result);
			// 老家到镇上有1千米的路程，镇子到县城有10千米的路程，县城到市区有5千米的路程
			
			// **示例：** 查找is
			// let str = 'is this a book?';
			// let reg = /\bis\b/g;
			// let result = str.match(reg)
			// console.log(result);// ["is"]
			// **示例：** 分组
			// let str = "abababababababababab 是重复字符串，替换为*"
			// // let reg = /abababababababababab/g
			// let reg = /(ab){1,}/g
			// let result = str.replace(reg,"*")
			// console.log(result);
			
			// **示例：** 将LiLei替换为李磊
			// let str = 'my name is LiLei';
			// let str = 'my name is Lilei';
			// let reg = /Li(L|l)ei/g
			// let result = str.replace(reg,'李磊')
			// console.log(result);
			
			// **示例：** 将2020-04-18 替换为 18/04/2020
			// let str = '2020-04-18';
			// let reg = /(\d{4})-(\d{1,2})-(\d{1,2})/g
			// let result = str.replace(reg,'$3/$2/$1')
			// console.log(result);
			
			// 获取?后面的name 捕获分组命名 固定格式?<变量名>
			// let str = "?name=zhangsan&age=28";
			// let reg = /\?(?<str>\w+)/
			// let result = str.match(reg);
			// console.log(result.groups.str) //name
			
			
			// 正向肯定断言：(?=)
			
			// 替换数字前面的iphone为苹果，iphoneNumber不变
			// let str = "iphone4iphone5iphone8iphone11iphoneNumber"
			// //(?=)
			// let reg = /iphone(?=\d{1,2})/g
			// let result = str.replace(reg,'苹果')
			// console.log(result) ////苹果4苹果5苹果8苹果11iphoneNumber
			
			
			// 正向否定断言：(?!)
			
			// 数字前面的iphone为苹果，替换iphoneNumber为->苹果number
			// let str = "iphone4iphone5iphone8iphone11iphoneNumber"
			// //(?!)
			// let reg = /iphone(?!\d{1,2})/g
			// let result = str.replace(reg,'苹果')
			// console.log(result) //苹果4苹果5苹果8苹果11iphoneNumber
			
			// 负向肯定断言(?<=)
			
			// 替换px为像素
			// let str = '10px20px30pxipx';
			// let reg = /(?<=\d{1,})px/g
			// let result = str.replace(reg,'像素')
			// console.log(result)  //10像素20像素30像素ipx
			// // 负向否定断言(?<!)
			
			// // 替换px为像素
			// let str = '10px20px30pxipx';
			// let reg = /(?<!\d{1,})px/g
			// let result = str.replace(reg,'像素')
			// console.log(result) // 10px20px30pxi像素
			
			// ### 匹配模式
			
			// 匹配模式 | 说明
			// ---|---
			// g | 全局匹配
			// i | 忽略大小写
			// m | 多行匹配
			// ^ | 

			
			// **示例：** 将aA字母替换为*
			// let str = 'abcdAbcd'
			// let reg = /a/gi
			// let result = str.replace(reg,'*')
			// console.log(result) //*bcd*bcd
			
			// **示例：** 解析html标签里的内容
			
			
			// 移除html的img标签
			
			// var content = `"<p><img src="https://hook.qwintek.cn/retail_data/img/202007/be96fa731bac753e356a588c091eb983.png" alt="图像"></img>123333<img src="https://hook.qwintek.cn/retail_data/img/202007/be96fa731bac753e356a588c091eb983.png" alt="图像"></p>"`
			// var imgReg = /(<img.*?>)(<\/img>)?/g
			// content = content.replace(imgReg,'')
			// console.log(content)
			// 替换图片前缀,如果有网址前缀不替换
			var content = `"<p><img src="/img/202007/be96fa731bac753e356a588c091eb983.png" alt="图像"></img>123333<img src="https://hook.qwintek.cn/retail_data/img/202007/be96fa731bac753e356a588c091eb983.png" alt="图像"></p>"`
			var imgReg = /<img(.*?)src="(.*?)"(.*?)>/g
			var url = 'https://hook.qwintek.cn/retail_data'
			
			content = content.replace(imgReg,function(context,$1,$2,$3){
				var currentUrl = $2;
				if(!/^(http|https)/.test($2)){
					currentUrl = url+currentUrl
				}
				return '<img'+$1+'src="'+currentUrl+'"'+$3+'>'
			})
			console.log(content)
		</script>
	</body>
</html>
